<?php

require_once dirname(__FILE__) . '/../../../../../importpkg.php';

require_once dirname(__FILE__) . '/../../../../../mau/dao/interface/IMau.php';
require_once dirname(__FILE__) . '/../../../../../mau/dao/implement/DB.php';
require_once dirname(__FILE__) . '/../../../../../mau/clases/Usuario.php';
require_once dirname(__FILE__) . '/../../../../../mau/clases/Modulo.php';
require_once dirname(__FILE__) . '/../../../../../mau/clases/Role.php';
require_once dirname(__FILE__) . '/../../../../../mau/clases/Permiso.php';
require_once dirname(__FILE__) . '/../../../../../mau/dao/implement/mysql/MauDao.php';

/**
 * Test class for Mau.
 * Generated by PHPUnit on 2011-10-20 at 01:03:54.
 */
class MauDaoTest extends PHPUnit_Framework_TestCase {

    /**
     * @var MauDao
     */
    protected $mau;

    /**
     * Sets up the fixture, for example, opens a network connection.
     * This method is called before a test is executed.
     */
    protected function setUp() {
        $this->mau = new MauDao();
        $this->mau->deleteUsuarioWhere("login = 'mpinedo' ");
        $this->mau->deleteModuloWhere("descripcion = 'Ventas' || descripcion = 'Contabilidad' ");
        $this->mau->deleteRoleWhere("descripcion = 'Editor' ");
        $this->mau->deletePermisoWhere("descripcion = 'escritura' ");

        $usuario = new Usuario();
        $usuario->setLogin("mpinedo");
        $usuario->setPassword("privado");
        $usuario->setRoleId(1);
        $this->usuario = $usuario;

        $modulo = new Modulo();
        $modulo->setDescripcion("Ventas");
        $this->modulo = $modulo;

        $role = new Role();
        $role->setDescripcion("Editor");
        $this->role = $role;

        $permiso = new Permiso();
        $permiso->setDescripcion("escritura");
        $permiso->setLlave("write");
        $permiso->setValor("2");
        $this->permiso = $permiso;
    }

    /**
     * Tears down the fixture, for example, closes a network connection.
     * This method is called after a test is executed.
     */
    protected function tearDown() {
        
    }

    /**
     * @todo Implement testGetUsuariobyId().
     */
    public function testGetUsuariobyId() {

        $mau = $this->mau;
        $usuario = $this->usuario;

        $id_usuario = $mau->setNuevoUsuario($usuario);
        $usuario = $mau->getUsuariobyId($id_usuario);
        $this->assertEquals($id_usuario, $usuario->getId());
        $this->assertEquals("mpinedo", $usuario->getLogin());
        $mau->deleteUsuarioById($id_usuario);
    }

    /**
     * @todo Implement testGetUsuarios().
     */
    public function testGetUsuarios() {
        $mau = $this->mau;
        $lista_usuarios = $mau->getUsuarios();
        $this->assertGreaterThan(0, count($lista_usuarios));
    }

    public function testSetNuevoUsuario() {
        $mau = $this->mau;
        $usuario = $this->usuario;

        $id_usuario = $mau->setNuevoUsuario($usuario);

        $usuario = $mau->getUsuarioById($id_usuario);
        $this->assertEquals("mpinedo", $usuario->getLogin());
        $mau->deleteUsuarioById($id_usuario);
    }

    public function testGetUsuarioWhere() {
        $mau = $this->mau;
        $usuario = $this->usuario;
        $id_usuario = $mau->setNuevoUsuario($usuario);
        $usuario = $mau->getUsuarioById($id_usuario);
        $this->assertEquals("mpinedo", $usuario->getLogin());
    }

    public function testDeleteUsuarioWhere() {
        $usuario = $this->usuario;
        $mau = $this->mau;

        $id_usuario = $mau->setNuevoUsuario($usuario);
        $usuario = $mau->getUsuarioById($id_usuario);
        $this->assertEquals("mpinedo", $usuario->getLogin());
        $mau->deleteUsuarioWhere("login = 'mpinedo'");
        $usuarios = $mau->getUsuarioWhere("login = 'mpinedo'");
        $this->assertEquals(0, count($usuarios));
    }

    public function testDeleteUsuarioById() {
        $usuario = $this->usuario;
        $mau = $this->mau;

        $id_usuario = $mau->setNuevoUsuario($usuario);
        $usuario = $mau->getUsuarioById($id_usuario);
        $this->assertEquals("mpinedo", $usuario->getLogin());
        $mau->deleteUsuarioById($usuario->getId());
        $usuario = $mau->getUsuarioWhere("login = 'mpinedo' ");
        $this->assertEquals(0, count($usuario));
    }

    public function testGetModulos() {
        $modulo = $this->modulo;
        $mau = $this->mau;
        $id_modulo = $mau->setNuevoModulo($modulo);
        $modulos = $mau->getModulos();
        $this->assertGreaterThan(0, count($modulos));
        $mau->deleteModuloById($id_modulo);
    }

    public function testGetModuloById() {
        $mau = $this->mau;
        $modulo = $this->modulo;
        $id_modulo = $mau->setNuevoModulo($modulo);
        $modulo = $mau->getModuloById($id_modulo);
        $this->assertEquals($id_modulo, $modulo->getId());
    }

    public function testSetNuevoModulo() {
        $mau = $this->mau;
        $modulo = $this->modulo;
        $id_modulo = $mau->setNuevoModulo($modulo);
        $modulo = $mau->getModuloById($id_modulo);
        $this->assertEquals("Ventas", $modulo->getDescripcion());
        $mau->deleteModuloById($id_modulo);
    }

    public function testGetModuloWhere() {
        $mau = $this->mau;
        $modulo = $this->modulo;

        $id_modulo = $mau->setNuevoModulo($modulo);
        $grupos = $mau->getModuloWhere("descripcion = 'Ventas' ");
        $this->assertEquals("Ventas", $grupos[0]->getDescripcion());
        $mau->deleteModuloById($id_modulo);
    }

    public function testDeleteModuloWhere() {
        $mau = $this->mau;
        $modulo = $this->modulo;
        $id_modulo = $mau->setNuevoModulo($modulo);

        $mau->deleteModuloWhere("descripcion = 'usuarios' ");

        $grupos = $mau->getModuloWhere("descripcion = 'usuarios'");
        $this->assertEquals(0, count($grupos));
    }

    public function testDeleteModuloById() {
        $mau = $this->mau;
        $modulo = $this->modulo;
        $id_modulo = $mau->setNuevoModulo($modulo);

        $mau->deleteModuloById($id_modulo);

        $modulos = $mau->getModuloWhere("descripcion = 'Ventas'");
        $this->assertEquals(0, count($modulos));
    }

    public function testSetNuevoRole() {
        $mau = $this->mau;
        $role = $this->role;
        $mau->setNuevoRole($role);
        $roles = $mau->getRoleWhere("descripcion = 'Editor' ");
        $this->assertEquals("Editor", $roles[0]->getDescripcion());
        $mau->deleteRoleWhere("descripcion = 'Editor' ");
    }

    public function testGetRoleWhere() {
        $mau = $this->mau;
        $role = $this->role;
        $mau->setNuevoRole($role);
        $roles = $mau->getRoleWhere("descripcion = 'Editor' ");
        $this->assertEquals("Editor", $roles[0]->getDescripcion());
        $mau->deleteRoleWhere("descripcion = 'Editor' ");
    }

    public function testDeleteRoleWhere() {
        $mau = $this->mau;
        $role = $this->role;

        $mau->setNuevoRole($role);
        $mau->deleteRoleWhere("descripcion = 'Editor' ");

        $roles = $mau->getRoleWhere("descripcion = 'Editor' ");
        $this->assertEquals(0, count($roles));
    }

    public function testGetRoles() {
        $role = $this->role;
        $mau = $this->mau;
        $roles = $mau->getRoles();
        $this->assertGreaterThan(0, count($roles));
    }

    public function testGetRoleById() {
        $mau = $this->mau;
        $role = $this->role;

        $mau->setNuevoRole($role);
        $roles = $mau->getRoleWhere("descripcion = 'Editor' ");
        $id = $roles[0]->getId();
        $role = $mau->getRoleById($id);
        $this->assertEquals($id, $role->getId());
        $mau->deleteRoleWhere("descripcion = 'Editor' ");
    }

    public function testDeleteRoleById() {
        $mau = $this->mau;
        $role = $this->role;

        $mau->setNuevoRole($role);
        $roles = $mau->getRoleWhere("descripcion = 'Editor'");
        $id = $roles[0]->getId();
        $mau->deleteRoleById($id);
        $roles = $mau->getRoleWhere("descripcion = 'Editor'");
        $this->assertEquals(0, count($roles));
    }

    public function testSetNuevoPermiso() {
        $mau = $this->mau;
        $permiso = $this->permiso;
        $mau->setNuevoPermiso($permiso);
        $permisos = $mau->getPermisoWhere("descripcion = 'escritura' ");
        $this->assertEquals("escritura", $permisos[0]->getDescripcion());
        $mau->deletePermisoWhere("descripcion = 'escritura' ");
    }

    public function testGetPermisoWhere() {
        $mau = $this->mau;
        $permiso = $this->permiso;

        $mau->setNuevoPermiso($permiso);
        $permisos = $mau->getPermisoWhere("descripcion = 'escritura' ");
        $this->assertEquals("escritura", $permisos[0]->getDescripcion());
        $mau->deletePermisoWhere("descripcion = 'escritura' ");
    }

    public function testDeletePermisoWhere() {
        $mau = $this->mau;
        $permiso = $this->permiso;

        $mau->setNuevoPermiso($permiso);
        $mau->deletePermisoWhere("descripcion = 'escritura' ");

        $roles = $mau->getPermisoWhere("descripcion = 'escritura' ");
        $this->assertEquals(0, count($roles));
    }

    public function testGetPermisos() {
        $mau = $this->mau;
        $permiso = $this->permiso;
        $permisos = $mau->getPermisos();
        $this->assertGreaterThan(0, count($permisos));
    }

    public function testGetPermisoById() {
        $mau = $this->mau;
        $permiso = $this->permiso;

        $mau->setNuevoPermiso($permiso);
        $permisos = $mau->getPermisoWhere("descripcion = 'escritura' ");
        $id = $permisos[0]->getId();
        $permiso = $mau->getPermisoById($id);
        $this->assertEquals($id, $permiso->getId());
    }

    public function testDeletePermisoById() {
        $mau = $this->mau;
        $permiso = $this->permiso;

        $mau->setNuevoPermiso($permiso);
        $permisos = $mau->getPermisoWhere("descripcion = 'escritura'");
        $id = $permisos[0]->getId();
        $mau->deletePermisoById($id);
        $permisos = $mau->getPermisoWhere("descripcion = 'Editor'");
        $this->assertEquals(0, count($permisos));
    }

    public function testSetModuloARole() {
        $mau = $this->mau;
        $role = $this->role;
        $modulo = $this->modulo;

        $id_modulo = $mau->setNuevoModulo($modulo);
        $id_role = $mau->setNuevoRole($role);

        $modulo = $mau->getModuloById($id_modulo);
        $role = $mau->getRoleById($id_role);

        $mau->setModuloARole($modulo, $role);

        $mau->deleteModuloDelRole($modulo, $role);
        $mau->deleteRoleById($id_role);
        $mau->deleteModuloById($id_modulo);
    }

    public function testDeleteModuloDelRole() {
        $mau = $this->mau;
        $role = $this->role;
        $modulo = $this->modulo;

        $id_modulo = $mau->setNuevoModulo($modulo);
        $id_role = $mau->setNuevoRole($role);

        $modulo = $mau->getModuloById($id_modulo);
        $role = $mau->getRoleById($id_role);

        $mau->setModuloARole($modulo, $role);

        $modulos = $mau->getModulosDeRole($role);
        $this->assertGreaterThan(0, count($modulos));

        $mau->deleteModuloDelRole($modulo, $role);

        $modulos = $mau->getModulosDeRole($role);
        $this->assertEquals(0, count($modulos));
        $mau->deleteRoleById($id_role);
        $mau->deleteModuloById($id_modulo);
    }

    public function testGetModulosDeRole() {
        $mau = $this->mau;
        $role = $this->role;
        $modulo = $this->modulo;

        $id_role = $mau->setNuevoRole($role);
        $id_modulo = $mau->setNuevoModulo($modulo);

        $role = $mau->getRoleById($id_role);
        $modulo = $mau->getModuloById($id_modulo);

        $mau->setModuloARole($modulo, $role);

        $modulos = $mau->getModulosDeRole($role);

        $this->assertGreaterThan(0, count($modulo));
        $this->assertEquals("Ventas", $modulo->getDescripcion());
        $mau->deleteModuloDelRole($modulo, $role);
        $mau->deleteRoleById($id_role);
        $mau->deleteModuloById($id_modulo);
    }

    public function testGetPermisosDelModulo() {
        $mau = $this->mau;
        $modulo = $this->modulo;
        $permiso = $this->permiso;

        $id_modulo = $mau->setNuevoModulo($modulo);
        $id_permiso = $mau->setNuevoPermiso($permiso);
        $mau->setPermisoAModulo($id_permiso, $id_modulo);
        $modulo = $mau->getModuloById($id_modulo);
        $permisos = $mau->getPermisosDelModulo($modulo);

        $this->assertGreaterThan(0, count($permisos));

        $mau->deletePermisoDelModulo($id_permiso, $id_modulo);
        $mau->deleteModuloById($id_modulo);
        $mau->deletePermisoById($id_permiso);
    }

    public function testSetPermisoAModulo() {
        $mau = $this->mau;
        $modulo = $this->modulo;
        $permiso = $this->permiso;

        $id_modulo = $mau->setNuevoModulo($modulo);
        $id_permiso = $mau->setNuevoPermiso($permiso);
        $mau->setPermisoAModulo($id_permiso, $id_modulo);

        $modulo = $mau->getModuloById($id_modulo);
        $permisos = $mau->getPermisosDelModulo($modulo);
        $this->assertEquals($permisos[0]->getDescripcion(), $permiso->getDescripcion());

        $mau->deletePermisoDelModulo($id_permiso, $id_modulo);
        $mau->deleteModuloById($id_modulo);
        $mau->deletePermisoById($id_permiso);
    }

    public function testDeletePermisoDelModulo() {
        $mau = $this->mau;
        $modulo = $this->modulo;
        $permiso = $this->permiso;

        $id_modulo = $mau->setNuevoModulo($modulo);
        $id_permiso = $mau->setNuevoPermiso($permiso);
        $mau->setPermisoAModulo($id_permiso, $id_modulo);
        $modulo = $mau->getModuloById($id_modulo);
        $permisos = $mau->getPermisosDelModulo($modulo);

        $this->assertEquals($permiso->getDescripcion(), $permisos[0]->getDescripcion());

        $mau->deletePermisoDelModulo($id_permiso, $id_modulo);
        $mau->deleteModuloById($id_modulo);
        $mau->deletePermisoById($id_permiso);
    }

    public function testSetUsuarioARole() {

        $mau = $this->mau;
        $usuario = $this->usuario;
        $role = $this->role;
        $id_usuario = $mau->setNuevoUsuario($usuario);
        $id_role = $mau->setNuevoRole($role);
        $mau->setUsuarioARole($id_usuario, $id_role);

        $usuario = $mau->getUsuarioById($id_usuario);

        $this->assertEquals($id_role, $usuario->getRoleId());

        $mau->deleteUsuarioById($id_usuario);
        $mau->deleteRoleById($id_role);
    }

    public function testUpdateModulo() {
        $mau = $this->mau;
        $modulo = $this->modulo;
        $id_modulo = $mau->setNuevoModulo($modulo);
        $modulo = $mau->getModuloById($id_modulo);
        $this->assertEquals("Ventas", $modulo->getDescripcion());
        $modulo->setDescripcion("Contabilidad");

        $mau->updateModulo($modulo);

        $modulo = $mau->getModuloById($id_modulo);
        $this->assertEquals("Contabilidad", $modulo->getDescripcion());
        $mau->deleteModuloById($id_modulo);
    }

    public function testUpdateRole() {

        $mau = $this->mau;
        $role = $this->role;
        $id_role = $mau->setNuevoRole($role);
        $role = $mau->getRoleById($id_role);
        $this->assertEquals("Editor", $role->getDescripcion());
        $role->setDescripcion("Nuevo Editor");

        $mau->updateRole($role);

        $role = $mau->getRoleById($id_role);
        $this->assertEquals("Nuevo Editor", $role->getDescripcion());
        $mau->deleteRoleById($id_role);
    }

    public function testUpdatePermiso() {

        $mau = $this->mau;
        $permiso = $this->permiso;

        $id_permiso = $mau->setNuevoPermiso($permiso);
        $permiso = $mau->getPermisoById($id_permiso);
        $this->assertEquals("escritura", $permiso->getDescripcion());
        $permiso->setDescripcion("nueva escritura");

        $mau->updatePermiso($permiso);

        $permiso = $mau->getPermisoById($id_permiso);
        $this->assertEquals("nueva escritura", $permiso->getDescripcion());
        $mau->deletePermisoById($id_permiso);
    }

    public function testUpdateUsuario() {

        $mau = $this->mau;
        $usuario = $this->usuario;

        $id_usuario = $mau->setNuevoUsuario($usuario);
        $usuario = $mau->getUsuarioById($id_usuario);
        $this->assertEquals("mpinedo", $usuario->getLogin());
        $usuario->setLogin("miguelp");

        $mau->updateUsuario($usuario);

        $usuario = $mau->getUsuarioById($id_usuario);
        $this->assertEquals("miguelp", $usuario->getLogin());
        $mau->deleteUsuarioById($id_usuario);
    }

    public function testAutenticarUsuario() {

        $mau = $this->mau;
        $usuario = $this->usuario;

        $id_usuario = $mau->setNuevoUsuario($usuario);

        $login = $usuario->getLogin();

        $usuario = $mau->autenticarUsuario($login, $usuario->getPassword());

        $this->assertEquals($login, $usuario->getLogin());
        $this->assertEquals($id_usuario, $usuario->getId());

        $mau->deleteUsuarioById($id_usuario);
    }

}

?>
